iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
AI & Data

30天胡搞瞎搞學會pyspark系列 第 3

[ Day 3 ] - Pyspark | 介紹 - DataFrame篇 - Data Overview

  • 分享至 

  • xImage
  •  

上一篇簡述了5個讀取資料的方法,是不是開始迫不及待的想要馬上開始進行Data的操作啦
先別急先別急,在我們開始實際針對DataFrame 進行操作之前, 先來看看幾個基本也很重要的但是卻常常會被忽略的function吧!

1. show()

顧名思義, 簡單來說就是將你的DataFrame中的資料show出來, 是我認為在處理資料的過程中非常重要的一個function, 一般而言在使用時, 多半只會注意到, 可以順利的把資訊show出來, 但這邊我覺得有幾個非常有意思的parameter可以簡單地幫助你更容易的了解你的資料!

1-1 show() - n = number (default = 20)

show()的function中,default 會是讓你可以顯示20筆的資料, 但你也可以指定顯示的筆數,如下範例

情境說明:
通常我在做操作時,會簡單的overview一下我的data時,會去調整他顯示的筆數多寡

rdd = sc.parallelize([("Carmen", 23, "吉普賽女郎"), ("Don José", 25, "青年衛兵下士"), ("Escamillo", 30, "鬥牛士")])
df = rdd.toDF(["name", "age", "Role"])
df.show(1)
df.show(2)
df.show()
'''
+---------+---+------------+OUTPUT+---------+---+------------+
df.show(1)
+------+----+-----------+
|  name| age|       Role|
+------+----+-----------+
|Carmen|  23| 吉普賽女郎|
+------+----+-----------+
df.show(2)
+--------+----+-------------+
|    name| age|         Role|
+--------+----+-------------+
|  Carmen|  23|   吉普賽女郎|
|Don José|  25| 青年衛兵下士|
+--------+----+-------------+
df.show()
+---------+----+-------------+
|     name| age|         Role|
+---------+----+-------------+
|   Carmen|  23|   吉普賽女郎|
| Don José|  25| 青年衛兵下士|
|Escamillo|  30|       鬥牛士|
+---------+----+-------------+
+---------+---+------------+OUTPUT+---------+---+------------+

1-2 show() - truncate (default = True)

這個truncate,是拿來做什麼的呢?當DataFrame中的row資訊太過豐富,在一般的defualt中,會被截斷,無法顯示出所有內容時,就可以使用這個!

  • True
  • False
  • 任何比例

情境說明:
想要顯示每一個row的所有內容,避免被截斷時

rdd = sc.parallelize([("Carmen", 23, "法國巴黎的性感吉普賽女郎","向煙草廠外面的大兵們吟唱愛情時的風情萬種。歌劇藝術中最為經久不衰的蛇蠍美人,死在了曾被她無情拋棄的何塞(Don José)手裏"), ("Don José", 25, "皇家專屬青年衛兵下士","倒霉士兵展開,他受到與作品同名的吉普賽女郎卡門的引誘。她時而可愛快樂,時而輕慢無情。總之,她在愛情方面可不是乖乖女;尤其是當在她對何塞失去興趣後,愛上了別人"), ("Escamillo", 30, "青年才俊之鬥牛士","")])
df = rdd.toDF(["name", "age", "Role","description"])
df.show()
df.show(truncate=50)
df.show(truncate=False)

'''
+---------+---+------------+OUTPUT-1+---------+---+------------+
df.show()
+---------+---+------------------------+-------------------------------------+
|     name|age|                    Role|                          description|
+---------+---+------------------------+-------------------------------------+
|   Carmen| 23|法國巴黎的性感吉普賽女郎|向煙草廠外面的大兵們吟唱愛情時的風...|
| Don José| 25|    皇家專屬青年衛兵下士|倒霉士兵展開,他受到與作品同名的吉...|
|Escamillo| 30|        青年才俊之鬥牛士|                                     |
+---------+---+------------------------+-------------------------------------+
'''
'''
+---------+---+------------+OUTPUT-2+---------+---+------------+
df.show(truncate=50)
+---------+---+------------------------+-------------------------------------------------------------------------------------------------+
|     name|age|                    Role|                                                                                      description|
+---------+---+------------------------+-------------------------------------------------------------------------------------------------+
|   Carmen| 23|法國巴黎的性感吉普賽女郎|向煙草廠外面的大兵們吟唱愛情時的風情萬種。歌劇藝術中最為經久不衰的蛇蠍美人,死在了曾被她無情拋...|
| Don José| 25|    皇家專屬青年衛兵下士|倒霉士兵展開,他受到與作品同名的吉普賽女郎卡門的引誘。她時而可愛快樂,時而輕慢無情。總之,她在...|
|Escamillo| 30|        青年才俊之鬥牛士|                                                                                                 |
+---------+---+------------------------+-------------------------------------------------------------------------------------------------+
'''
'''
+---------+---+------------+OUTPUT-3+---------+---+------------+
df.show(truncate=False)
+---------+---+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+
|name     |age|Role                    |description                                                                                                                                                 |
+---------+---+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+
|Carmen   |23 |法國巴黎的性感吉普賽女郎|向煙草廠外面的大兵們吟唱愛情時的風情萬種。歌劇藝術中最為經久不衰的蛇蠍美人,死在了曾被她無情拋棄的何塞(Don José)手裏                                      |
|Don José |25 |皇家專屬青年衛兵下士    |倒霉士兵展開,他受到與作品同名的吉普賽女郎卡門的引誘。她時而可愛快樂,時而輕慢無情。總之,她在愛情方面可不是乖乖女;尤其是當在她對何塞失去興趣後,愛上了別人|
|Escamillo|30 |青年才俊之鬥牛士        |                                                                                                                                                            |
+---------+---+------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------+
+---------+---+------------+OUTPUT+---------+---+------------+

df.show()
https://ithelp.ithome.com.tw/upload/images/20230918/20163029ppriExYYg7.png
df.show(truncate=50)
https://ithelp.ithome.com.tw/upload/images/20230918/20163029qtB8pcyczB.png
df.show(truncate=False)
https://ithelp.ithome.com.tw/upload/images/20230918/20163029hYDFBEw3lm.png

1-3 show() - vertical

情境說明:
通常會推薦於使用來看巢狀結構(nested)的資料,但是在一般資料上的展現其實也有很好的效果

rdd = sc.parallelize([("Carmen", 23, "法國巴黎的性感吉普賽女郎","向煙草廠外面的大兵們吟唱愛情時的風情萬種。歌劇藝術中最為經久不衰的蛇蠍美人,死在了曾被她無情拋棄的何塞(Don José)手裏"), ("Don José", 25, "皇家專屬青年衛兵下士","倒霉士兵展開,他受到與作品同名的吉普賽女郎卡門的引誘。她時而可愛快樂,時而輕慢無情。總之,她在愛情方面可不是乖乖女;尤其是當在她對何塞失去興趣後,愛上了別人"), ("Escamillo", 30, "青年才俊之鬥牛士","")])
df = rdd.toDF(["name", "age", "Role","description"])
df.show()
df.show(vertical=True)

'''
+---------+---+------------+OUTPUT+---------+---+------------+
df.show()
+---------+---+------------------------+-------------------------------------+
|     name|age|                    Role|                          description|
+---------+---+------------------------+-------------------------------------+
|   Carmen| 23|法國巴黎的性感吉普賽女郎|向煙草廠外面的大兵們吟唱愛情時的風...|
| Don José| 25|    皇家專屬青年衛兵下士|倒霉士兵展開,他受到與作品同名的吉...|
|Escamillo| 30|        青年才俊之鬥牛士|                                     |
+---------+---+------------------------+-------------------------------------+
df.show(vertical=True)
-RECORD 0--------------------------------------------
 name        | Carmen                                
 age         | 23                                    
 Role        | 法國巴黎的性感吉普賽女郎              
 description | 向煙草廠外面的大兵們吟唱愛情時的風... 
-RECORD 1--------------------------------------------
 name        | Don José                              
 age         | 25                                    
 Role        | 皇家專屬青年衛兵下士                  
 description | 倒霉士兵展開,他受到與作品同名的吉... 
-RECORD 2--------------------------------------------
 name        | Escamillo                             
 age         | 30                                    
 Role        | 青年才俊之鬥牛士                      
 description |
+---------+---+------------+OUTPUT+---------+---+------------+
'''

1-4 show(n=3,truncate=25,vertical=True) Combo組合技

df.show(n=3,truncate=50,vertical=True)
'''
-RECORD 0--------------------------------------------------------------------------------------------------------
 name        | Carmen                                                                                            
 age         | 23                                                                                                
 Role        | 法國巴黎的性感吉普賽女郎                                                                          
 description | 向煙草廠外面的大兵們吟唱愛情時的風情萬種。歌劇藝術中最為經久不衰的蛇蠍美人,死在了曾被她無情拋... 
-RECORD 1--------------------------------------------------------------------------------------------------------
 name        | Don José                                                                                          
 age         | 25                                                                                                
 Role        | 皇家專屬青年衛兵下士                                                                              
 description | 倒霉士兵展開,他受到與作品同名的吉普賽女郎卡門的引誘。她時而可愛快樂,時而輕慢無情。總之,她在... 
-RECORD 2--------------------------------------------------------------------------------------------------------
 name        | Escamillo                                                                                         
 age         | 30                                                                                                
 Role        | 青年才俊之鬥牛士                                                                                  
 description |
'''

2. printSchema()

這個就相對單純一點, 就是將你目前的data structure顯示出來
包含DataType以及有哪些column等等
df.printSchema()

root
 |-- name: string (nullable = true)
 |-- age: long (nullable = true)
 |-- Role: string (nullable = true)
 |-- description: string (nullable = true)

3. describe()

這個describe() 其實非常的方便,可以透過簡單的語法去幫你統計每個column的基本資訊,包含
count,mean,stddev,min,max

情境說明:
很適合拿來overview 整個DataFrame!

rdd = sc.parallelize([("Carmen", 23,45,"法國巴黎的性感吉普賽女郎"), ("Don José", 25,70, "皇家專屬青年衛兵下士"), ("Escamillo", 30,75, "青年才俊之鬥牛士")])
df = rdd.toDF(["name", "age","weight", "Role"])
df.describe(['name','age','weight','Role']).show()
'''
+---------+---+------------+OUTPUT+---------+---+------------+
+-------+---------+-----------------+------------------+------------------------+
|summary|     name|              age|            weight|                    Role|
+-------+---------+-----------------+------------------+------------------------+
|  count|        3|                3|                 3|                       3|
|   mean|     null|             26.0|63.333333333333336|                    null|
| stddev|     null|3.605551275463989|16.072751268321593|                    null|
|    min|   Carmen|               23|                45|法國巴黎的性感吉普賽女郎|
|    max|Escamillo|               30|                75|        青年才俊之鬥牛士|
+-------+---------+-----------------+------------------+------------------------+
+---------+---+------------+OUTPUT+---------+---+------------+
'''

希望今天的同場加映有幫助到大家更深入了解這些,基本且常用的function秘辛!
如果有任何不理解、錯誤或其他方法想分享的話,歡迎留言給我!喜歡的話,也歡迎按讚訂閱!

我是 Vivi,一位在雲端掙扎的資料工程師!我們下一篇文章見!Bye Bye~
【本篇文章將同步更新於個人的 Medium,期待與您的相遇!】


上一篇
[ Day 2 ] - Pyspark | 介紹 - DataFrame篇 - Create DataFrame
下一篇
[ Day 4 ] - Pyspark | 介紹 - DataFrame篇 - Select
系列文
30天胡搞瞎搞學會pyspark30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言